import vue from "@/main";
import axios from "axios";
const qs = require("qs");

const BASE_URL = process.env.NODE_ENV !== 'production' ? process.env.VUE_APP_BASE_API : process.env.VUE_APP_SERVER_URL
// const BASE_URL = process.env.NODE_ENV !== 'production' ? process.env.VUE_APP_BASE_API : window.location.protocol + '//' + window.location.host + '/service-api'
console.info(
        `%c当前版本%c${process.env.VUE_APP_GIT_TAG}`,
        'color: #ffffff; background: #000000; padding:5px 10px 5px 10px;font-size:40px;border-radius:12px 0 0 12px;',
        'color: #000000; background: #FE9A00; padding:5px 10px;font-size:40px;border-radius:0 12px 12px 0;'
        // ' text-shadow: 0 1px 0 #ccc,0 2px 0 #c9c9c9,0 3px 0 #bbb,0 4px 0 #b9b9b9,0 5px 0 #aaa,0 6px 1px rgba(0,0,0,.1),0 0 5px rgba(0,0,0,.1),0 1px 3px rgba(0,0,0,.3),0 3px 5px rgba(0,0,0,.2),0 5px 10px rgba(0,0,0,.25),0 10px 10px rgba(0,0,0,.2),0 20px 20px rgba(0,0,0,.15);font-size:3em')
    )
    // 添加请求拦截器
axios.interceptors.request.use(
    function(request) {
        // 没有参数统一添加空对象
        request.data = request.data || {};
        // 在发送请求之前的处理-
        if (request.url !== "/user/login") {
            const token = sessionStorage.getItem("token");
            token && (request.headers.token = token);
        }
        request.url = BASE_URL + request.url
        return request;
    },
    function(error) {
        vue.$alert(error, "请求错误", { type: "error" });
        return Promise.reject(error);
    }
);

// 添加响应拦截器
axios.interceptors.response.use(
    
    function(response) {
        // code
        /**
         * + 0 成功
          + 101 用户未登录
          + 404 访问地址错误
          + 500 系统错误
          + 601 token过期
          + 10000 后端返回提示，直接输出
          + 10001 数据错误OR数据没找到
          + 10002 数据验证失败
         */
        if (response.data.code != 0 && response.data.code != 200) {
            if (response.data.code == 254) {
                sessionStorage.removeItem('token')
                sessionStorage.removeItem('user')
                vue.$router.push("/login");
            }
            vue.$alert(response.data.info, "提示", { type: "error" })
            return;
        }
        if (response.status === 401) { // 超时自动刷新
            axios({
                url: '/user/refreshToken',
                method: 'get',
            }).then(({ data }) => {
                if (data && data.success) {
                    sessionStorage.setItem('token', data.token)
                } else {
                    // clearLoginInfo()
                    vue.$router.push({ name: 'login' })
                }
            })
        }
        // //console.log(response.config.url, response.data); // 线上静态数据调用打印
        return response;
    },
    function(error) {
        vue.$alert(error, "响应错误", { type: "error" });
        return Promise.reject(error);
    }
);
export default axios

// export default {
//     //get请求
//     get(url, param) {
//         return new Promise((resolve, reject) => {
//             axios({
//                 method: "get",
//                 url: BASE_URL + url,
//                 params: param,
//             }).then(res => {
//                 resolve(res);
//             }).catch(err => {
//                 reject(err);
//             });
//         });
//     },
//     //post请求
//     post(url, param) {
//         return new Promise((resolve, reject) => {
//             axios({
//                 method: "post",
//                 url: BASE_URL + url,
//                 data: param,
//             }).then(res => {
//                 resolve(res);
//             }).catch(err => {
//                 reject(err);
//             });
//         });
//     },
//     //form-data
//     postform(url, param) {
//         return new Promise((resolve, reject) => {
//             axios({
//                 method: "post",
//                 url: BASE_URL + url,
//                 data: qs.stringify(param),
//                 headers: {
//                     "Content-Type": "multipart/form-data",
//                 }
//             }).then(res => {
//                 resolve(res);
//             }).catch(err => {
//                 reject(err);
//             });
//         });
//     },
//     postWWWFormUrlencoded(url, param) {
//         return new Promise((resolve, reject) => {
//             axios({
//                 method: "post",
//                 url: BASE_URL + url,
//                 data: qs.stringify(param),
//                 headers: {
//                     "Content-Type": "application/x-www-form-urlencoded",
//                 }
//             }).then(res => {
//                 resolve(res);
//             }).catch(err => {
//                 reject(err);
//             });
//         });
//     },
//     put(url, param, isFormData = false) {
//         let config = {
//             method: "put",
//             url: BASE_URL + url,
//             data: param
//         };
//         if (isFormData) {
//             config.headers = {
//                 "Content-Type": "application/x-www-form-urlencoded"
//             };
//             config.data = qs.stringify(param);
//         }
//         return new Promise((resolve, reject) => {
//             axios(config).then(res => {
//                 resolve(res);
//             }).catch(err => {
//                 reject(err);
//             });
//         });
//     },
//     // blob下载
//     file(url, param, method = "GET") {
//         return new Promise((resolve, reject) => {
//             axios({
//                 method: method,
//                 url: BASE_URL + url,
//                 data: param,
//                 responseType: "blob",
//                 headers: {
//                     "Content-Type": "multipart/form-data"
//                 }
//             }).then(res => {
//                 resolve(res);
//             }).catch(err => {
//                 reject(err);
//             });
//         });
//     },
//     delete(url, param) {
//         return new Promise((resolve, reject) => {
//             axios({
//                 method: "delete",
//                 url: BASE_URL + url,
//                 params: param
//             }).then(res => {
//                 resolve(res);
//             }).catch(err => {
//                 reject(err);
//             });
//         });
//     },

//     downloadFile(url, param) {
//         return new Promise((resolve, reject) => {
//             axios({
//                 method: 'post',
//                 url: BASE_URL + url,
//                 responseType: 'blob',
//                 data: param,
//             }).then(response => {
//                 //console.log('suc', response)
//                 resolve(response);
//             }).catch((error) => {
//                 //console.log('sfail', error)
//                 reject(error);
//             })
//         });
//     },
// };